package com.jiangxjsy.crm.client;

import com.jiangxjsy.core.wrap.Result;
import com.jiangxjsy.core.wrap.ResultBuilder;
import com.jiangxjsy.model.admin.entity.AdminConfig;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * wukong-crm-master
 * 蒋胜宇
 * 2025/6/18 14:45
 */

@FeignClient(name = "admin", fallback = AdminClient.AdminClientFallback.class)
public interface AdminClient {
    /**
     * 根据名称查询配置
     *
     * @param name 配置名称
     * @return 配置
     */
    @RequestMapping(value = "/adminConfig/queryFirstConfigByName")
    Result<AdminConfig> queryFirstConfigByName(@RequestParam("name") String name);

    /**
     * 根据角色类型查询角色
     *
     * @param type 角色类型
     * @return 角色列表
     */
    @PostMapping(value = "/adminRole/queryRoleByRoleType")
    Result<List<Long>> queryRoleByRoleType(@RequestParam("type") Integer type);

    /**
     * 查询该用户下级的用户
     * @param userId 用户 id
     * @return Result
     */
    @RequestMapping(value = "/adminUser/queryChildUserId")
    Result<List<Long>> queryChildUserId(@RequestParam("userId") Long userId);


    @Component
    class AdminClientFallback implements AdminClient {
        /**
         * 根据名称查询配置
         *
         * @param name 配置名称
         * @return 配置
         */
        @Override
        public Result<AdminConfig> queryFirstConfigByName(String name) {
            return ResultBuilder.ok(null);
        }

        /**
         * 根据角色类型查询角色
         *
         * @param type 角色类型
         * @return 角色列表
         */
        @Override
        public Result<List<Long>> queryRoleByRoleType(Integer type) {
            return ResultBuilder.ok(Collections.emptyList());
        }

        /**
         * 查询该用户下级的用户
         * @param userId 用户 id
         * @return Result
         */
        @Override
        public Result<List<Long>> queryChildUserId(Long userId) {
            return ResultBuilder.ok(new ArrayList<>());
        }
    }
}
